"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 10、测试人论坛搜索功能实战.py
"""

"""
https://ceshiren.com/
用例标题：测试人搜索功能
用例级别：高
前提条件：进入测试人论坛首页
用例步骤：1. 点击搜索按钮  2. 输入搜索关键字  3. 点击搜索按钮
预期结果：1. 搜索功能  2. 搜索结果列表包含关键字
实际结果： 和预期结果对比
"""

from selenium import webdriver
from selenium.webdriver.common.by import By


# 测试人模块的搜索功能
class TestCeshiren:

    def setup(self):
        """
        前提条件：进入测试人论坛首页
        :return:
        """
        # 打开浏览器
        self.driver = webdriver.Chrome()
        # 设置隐形等待
        self.driver.implicitly_wait(10)
        # 最大化浏览器
        self.driver.maximize_window()
        # 打开测试人搜索网页
        self.driver.get('https://ceshiren.com/search?expanded=true')

    def teardown(self):
        # 每一次用例结束后都会关闭 chromdriver 的进程。也会关闭浏览器
        self.driver.quit()

    def test_search(self):
        """
        用例步骤：1. 输入搜索关键字  2. 点击搜索按钮
        :return:
        """
        # 定位到搜索框，并输入 appium 关键字  使用css属性   由于 id 是动态 id，找元素不能使用
        self.driver.find_element(By.CSS_SELECTOR, '[placeholder="搜索"]').send_keys('appium')
        # 定位到搜索按钮，并点击。取中间的一个标志类属性：和业务相关的 - 独一无二的
        self.driver.find_element(By.CSS_SELECTOR, '.search-cta').click()
        # 获取实际结果，即为获取搜索结果列表的标题内容
        # 第一种方式，获取第一个搜索结果
        web_element = self.driver.find_element(By.CSS_SELECTOR, '.topic-title')
        print(web_element)  # 本地debug调试用，获取元素对象的属性：用作后面的断言
        # 获取文本类的实际结果    断言 ： 实际结果与预期结果对比 - appium 关键字是否在获取的对象属性实际结果文本中
        assert "关于Appium雪球元素定位出现的问题" == web_element.text
        # lower() 使大写字母转化成小写
        assert "关于appium雪球元素定位出现的问题" == web_element.text.lower()

        # 第二种方法 ： 获取对象属性的列表，查看元素是否在对象列表中
        web_elements = self.driver.find_elements(By.CSS_SELECTOR, '.topic-title')
        # 获取文本类的实际结果列表
        webele_list = [i.text for i in web_elements]
        assert "关于Appium雪球元素定位出现的问题" in webele_list
